package cn.zhangzhan.common.utils.collection;


import com.google.common.annotations.GwtCompatible;
import com.google.common.collect.ImmutableList;
import org.checkerframework.checker.nullness.qual.Nullable;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * @author 张一恒
 * @version 1.0
 * @description: 参考jdk9新特性，使用guava代替 不可变集合对象
 * 尽量靠近jdk9使用方法 （纯属个人习惯）
 * @date 2024/11/1 13:21
 */
public class Lists {

    public static <E> List<E> of() {
        return ImmutableList.of();
    }

    public static <E> List<E> of(E element) {
        return ImmutableList.of(element);
    }

    public static <E> List<E> of(E e1, E e2) {
        return ImmutableList.of(e1, e2);
    }

    public static <E> List<E> of(E e1, E e2, E e3) {
        return ImmutableList.of(e1, e2, e3);
    }

    public static <E> List<E> of(E e1, E e2, E e3, E e4) {
        return ImmutableList.of(e1, e2, e3, e4);
    }

    public static <E> List<E> of(E e1, E e2, E e3, E e4, E e5) {
        return ImmutableList.of(e1, e2, e3, e4, e5);
    }

    public static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6) {
        return ImmutableList.of(e1, e2, e3, e4, e5, e6);
    }

    public static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7) {
        return ImmutableList.of(e1, e2, e3, e4, e5, e6, e7);
    }

    public static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) {
        return ImmutableList.of(e1, e2, e3, e4, e5, e6, e7, e8);
    }

    public static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) {
        return ImmutableList.of(e1, e2, e3, e4, e5, e6, e7, e8, e9);
    }

    public static <E> List<E> of(
            E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) {
        return ImmutableList.of(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10);
    }


    public static <E> List<E> of(
            E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11) {
        return ImmutableList.of(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11);
    }

    // These go up to eleven. After that, you just get the varargs form, and
    // whatever warnings might come along with it. :(

    @SafeVarargs // For Eclipse. For internal javac we have disabled this pointless type of warning.
    public static <E> List<E> of(
            E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11, E e12, E... others) {
        return ImmutableList.of(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, others);
    }

    /**
     * @description newArrayList
     *
     * @return java.util.List<E>
     * @author zhangyiheng
     * @date 2024/11/1 13:34
     */
    @GwtCompatible(serializable = true)
    public static <E extends @Nullable Object> List<E> newArrayList() {
        return new ArrayList<>();
    }

    /**
     * @description newLinkedList
     *
     * @return java.util.List<E>
     * @author zhangyiheng
     * @date 2024/11/1 13:34
     */
    @GwtCompatible(serializable = true)
    public static <E extends @Nullable Object> List<E> newLinkedList() {
        return new LinkedList<>();
    }

}
